package com.c2b.algorithm.leetcode.base;

/**
 * <a href='https://leetcode.cn/problems/count-number-of-pairs-with-absolute-difference-k/'>差的绝对值为 K 的数对数目(Count Number of Pairs With Absolute Difference K)</a>
 * <p>给你一个整数数组 nums 和一个整数 k ，请你返回数对 (i, j) 的数目，满足 i < j 且 |nums[i] - nums[j]| == k 。</p>
 * <p>
 *     |x| 的值定义为：
 *     <ul>
 *         <li>如果 x >= 0 ，那么值为 x 。</li>
 *         <li>如果 x < 0 ，那么值为 -x 。</li>
 *     </ul>
 * </p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：nums = [1,2,2,1], k = 1
 *      输出：4
 *      解释：差的绝对值为 1 的数对为：
 *          - [1,2,2,1]
 *          - [1,2,2,1]
 *          - [1,2,2,1]
 *          - [1,2,2,1]
 *
 * 示例 2：
 *      输入：nums = [1,3], k = 3
 *      输出：0
 *      解释：没有任何数对差的绝对值为 3 。
 *
 * 示例 3：
 *      输入：nums = [3,2,1,5,4], k = 2
 *      输出：3
 *      解释：差的绝对值为 2 的数对为：
 *          - [3,2,1,5,4]
 *          - [3,2,1,5,4]
 *          - [3,2,1,5,4]
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 * <ul>
 *     <li>1 <= nums.length <= 200</li>
 *     <li>1 <= nums[i] <= 100</li>
 *     <li>1 <= k <= 99</li>
 * </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/1/18 17:23
 */
public class LC2006CountNumberOfPairsWithAbsoluteDifferenceK_S {
    static class Solution {
        public int countKDifference(int[] nums, int k) {
            int[] cnt = new int[101];
            // 统计每个数字出现的次数
            for (int num : nums) {
                ++cnt[num];
            }
            int res = 0;
            for (int i = 1; i < cnt.length - k; i++) {
                res += cnt[i] * cnt[i + k];
            }
            return res;
        }

        public static void main(String[] args) {
            Solution solution = new Solution();
            System.out.println(solution.countKDifference(new int[]{1, 2, 2, 1}, 1));
            System.out.println(solution.countKDifference(new int[]{1, 3}, 3));
            System.out.println(solution.countKDifference(new int[]{3, 2, 1, 5, 4}, 2));
        }
    }
}
